Skip to content

Add cryptographic hash chaining as tamper evidence option for C9.4.3#145

Merged
jmanico merged 3 commits intoOWASP:mainfrom
mattijsmoens:patch-1
Mar 24, 2026
Merged

Add cryptographic hash chaining as tamper evidence option for C9.4.3#145
jmanico merged 3 commits intoOWASP:mainfrom
mattijsmoens:patch-1

Conversation

@mattijsmoens
Copy link
Contributor

@mattijsmoens mattijsmoens commented Mar 13, 2026

Related to #144

Extends C9.4.3 to include cryptographic hash chaining as a tamper evidence mechanism alongside append only/WORM/immutable log store. Hash chains (each record includes the hash of the prior record) provide portable tamper evidence that works with any storage backend, can be independently verified by any party, and detects tampering even if the storage layer is compromised. Reference implementation: https://github.com/mattijsmoens/sovereign-shield (CoreSafety module, SHA-256 hash chains for audit entries)

Extends C9.4.3 to include cryptographic hash chaining as a tamper evidence mechanism alongside append only/WORM/immutable log store.
Hash chains (each record includes the hash of the prior record) provide portable tamper evidence that works with any storage backend, can be independently verified by any party, and detects tampering even if the storage layer is compromised.
Reference implementation: https://github.com/mattijsmoens/sovereign-shield (CoreSafety module, SHA-256 hash chains for audit entries)
| **9.4.1** | **Verify that** each agent instance (and orchestrator/runtime) has a unique cryptographic identity and authenticates as a first-class principal to downstream systems (no reuse of end-user credentials). | 1 | D/V |
| **9.4.2** | **Verify that** agent-initiated actions are cryptographically bound to the execution chain (chain ID) and are signed and timestamped for non-repudiation and traceability. | 2 | D/V |
| **9.4.3** | **Verify that** audit logs are tamper-evident (append-only/WORM/immutable log store) and include sufficient context to reconstruct who/what acted, initiating user identifier, delegation scope, authorization decision (policy/version), tool parameters, approvals (where applicable), and outcomes. | 2 | D/V |
| **9.4.3** | **Verify that** audit logs are tamper-evident (via append-only/WORM/immutable log store, cryptographic hash chaining where each record includes the hash of the prior record, or equivalent integrity guarantees that can be independently verified) and include sufficient context to reconstruct who/what acted, initiating user identifier, delegation scope, authorization decision (policy/version), tool parameters, approvals (where applicable), and outcomes. | 2 | D/V |
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think "tamper-evident" summarizes our intent of integrity guarantees. I'm not sure if we need to document such implementation detail.

Where the implementation details are not specific to AI, I would leave it to be looked up from other sources and keep it high-level; we just set this as a requirement for AI systems on certain level of security.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a fair point. "Tamper-evident" does cover the intent well, and I agree the standard should stay implementation-agnostic. I could simplify the wording. Would something like "tamper-evident (via append-only storage, cryptographic chaining, or equivalent integrity guarantees that can be independently verified)" work? That keeps it high-level while acknowledging there's more than one valid approach.

Simplified wording per reviewer feedback - implementation-agnostic
@jmanico
Copy link
Member

jmanico commented Mar 17, 2026

I would like to keep away from prescriptive controls especially around logging, something already covered in ASVS.

May I politely suggest:

Verify that audit logs are integrity-protected and include sufficient context to reconstruct who or what acted, the initiating user identifier, delegation scope, authorization decision, tool parameters, approvals where applicable, and outcomes.

or

Verify that audit logs are protected against unauthorized modification and include sufficient context to reconstruct who or what acted, the initiating user identifier, delegation scope, authorization decision, tool parameters, approvals where applicable, and outcomes.

.. and if this to too far from your vision please push back!

@RicoKomenda
Copy link
Contributor

Because of a duplicate I opened #222 & #322 and changed the text of 9.4.3

@ottosulin / @jmanico:
So we have/had more or less the same meaning in:
9.4.3
13.1.6
14.3.2

What do you think?

@ottosulin
Copy link
Collaborator

@RicoKomenda agreed with your dedup PRs good catches now the content is overall much more consistent. Both merged now.

@jmanico jmanico merged commit 3a7af3a into OWASP:main Mar 24, 2026
2 checks passed
RicoKomenda added a commit to RicoKomenda/AISVS that referenced this pull request Mar 24, 2026
9.4.3 was listed twice following a merge conflict between PR OWASP#222
(which removed the generic tamper-evidence clause from 9.4.3) and
PR OWASP#145 (which added cryptographic hash chaining as a tamper-evidence
option by inserting a new row, not replacing the existing one).

Both rows covered the same requirement. The first row (introduced by
PR OWASP#145) is kept as it is the more complete version: it covers all
tamper-evidence mechanisms (WORM/append-only, hash chaining, equivalent
guarantees) plus all agent-specific context fields. The second row
(the PR OWASP#222 remnant) was a subset and is removed.
jmanico pushed a commit that referenced this pull request Mar 24, 2026
9.4.3 was listed twice following a merge conflict between PR #222
(which removed the generic tamper-evidence clause from 9.4.3) and
PR #145 (which added cryptographic hash chaining as a tamper-evidence
option by inserting a new row, not replacing the existing one).

Both rows covered the same requirement. The first row (introduced by
PR #145) is kept as it is the more complete version: it covers all
tamper-evidence mechanisms (WORM/append-only, hash chaining, equivalent
guarantees) plus all agent-specific context fields. The second row
(the PR #222 remnant) was a subset and is removed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants